#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "personnel.h"

/*********************************************************************************************************************************************/
/*Fonction pour tester l'unicité d'une CIN (type date)*/
/*********************************************************************************************************************************************/
int comparer_cin_per(int comp_cin)
{ FILE *f;
  personnel per;
  int res=0;

  f=fopen("fichier_personnel","r");
  if (f!=NULL)
	{
         while(fread(&per,sizeof(personnel),1,f)!=0 && res==0)
 	    {
	      if(per.cin== comp_cin)
	       res=1;
 	    }
 	}
return res;
}


/*********************************************************************************************************************************************/
/*Fonction pour tester  le nbr de jours d'un mois */
/*********************************************************************************************************************************************/

int test_per(int jour,int mois)
{
	int test=0;
	if((mois==4)||(mois==6)||(mois==9)||(mois==11))
		{
		if(jour>30)
			{test=1;}
		}
	else if ((mois==2)&&(test==0))
		{
		if(jour>29)
			{test=1;}
		}
	else
		if(jour>31)
			{test=1;}
return test;
}


/*********************************************************************************************************************************************/
/*Fonction pour comparer deux dates (type date)*/
/*********************************************************************************************************************************************/
int comparer_date_per(personnel *p,int jour,int mois,int annee)
{
    int comp=0;
    if(p->date_naissance.annee < annee)
    {
        comp=1;
    }
    else if (p->date_naissance.annee==annee)
    {
        if (p->date_naissance.mois < mois)
        {
            comp=1;
        }
        else if (p->date_naissance.mois==mois)
        {
            if (p->date_naissance.jour<jour)
            {
                comp=1;
            }
        }
    }
    return comp;
}
/*********************************************************************************************************************************************/
/*Fonction pour controler le nombre de chiffre d'un entier*/
/*********************************************************************************************************************************************/
int longueur_per(int nbr)
{
    int l= 0;

    while(nbr !=0)
    {
        l++;
        nbr = nbr / 10;
    }
    return l;
}



/*********************************************************************************************************************************************/
/*Fonction pour enregistrer les champ pré-saisi d'un personnel*/
/*********************************************************************************************************************************************/

void Enregistrer_personnel(char fichier_personnel[],personnel *p)
{
    FILE *f;
   


    f = fopen(fichier_personnel, "ab");

    if (f!=NULL)

    {
        
        fwrite(p,sizeof(personnel),1,f);

    }

    else

        printf("Erreur d'ouverture");


    fclose(f);
}


/*********************************************************************************************************************************************/
/*Fonction pour afficher la liste des personnels*/
/*********************************************************************************************************************************************/

/*void afficher_personnels(char fichier_personnel[])
{
    personnel p;
    int i=0;

    FILE *f;

    f = fopen(fichier_personnel, "rb");

    if (f!=NULL)

    {

        while(fread(&p,sizeof(personnel),1,f)!=0)
        {
            i++;
            printf("\nPersonnel %d  :\nNom: %s \nPrenom: %s \nCIN: %d \nMatricule: %s \nMail: %s \nTelephone: %d \nStatut: %s \nPhoto: %s \nDate de naissance:  %d /%d/ %d \nDate d\'embauche:  %d /%d/ %d\n\n",i,p.nom,p.prenom,p.cin,p.matricule,p.mail,p.telephone,p.statut,p.photo,p.date_naissance.jour,p.date_naissance.mois,p.date_naissance.annee,p.date_embauche.jour,p.date_embauche.mois,p.date_embauche.annee);
        }
    }

    else

        printf("Erreur d'ouverture");

    fclose(f);
}

/*********************************************************************************************************************************************/
/*Fonction pour chercher un personnel grace a sa matricule*/
/*********************************************************************************************************************************************/

int  rechercher_personnel(char fichier_personnel[],int CIN_cherche/*,char nom_cherche[],char matricule_cherche[]*/,personnel *p)
{
    
    
    int exist=0;
    //int choix;
    //int Quit=0;
    FILE *f;
    //do
   // {
        //printf("****************************************************************************\n\n");
        //printf("****************************************************************************\n\n");
        //printf("***********               Menu recherche                ********************\n");
        //printf("***********            1-recherche avec CIN             ********************\n");
        //printf("***********            2-recherche avec nom             ******f**************\n");
        //printf("***********            3-recherche avec matricule       ********************\n");
        //printf("***********            0-retour au menu princiapl       ********************\n\n");
        //printf("****************************************************************************\n");
        //printf("\n\t\t\t\tveuillez saisir votre choix svp \n");
        //scanf("%d",&choix);
        //printf("****************************************************************************\n");

        //switch (choix)
        //{
        //case 1 :
        //{
            f=fopen(fichier_personnel, "rb");

            /*printf ("\n\t\t\t\t\tdonner le num de CIN du personnel :\n") ;
            scanf("%d",&CIN_cherche);*/

            if (f!=NULL)
            { exist=0;
	      rewind(f);
                while(fread(p,sizeof(personnel),1,f)!=0 && exist!=1)

                {
                    if (CIN_cherche==p->cin)
                    {
                        exist=1;
                        return 1;
//*per=p;
                        /*printf("\n\t\t\t\t\tle personnel recherche existe \n");
                        printf("Nom:%s\nPrenom:%s\nMatricule:%s\nMail:%s\nCIN:%d\nTelephone:%d\nStatut: %s \nDate de naissance:%d/%d/%d \nPhoto:%s \nDate d\'embauche:%d/%d/%d ",p.nom,p.prenom,p.matricule,p.mail,CIN_cherche,p.telephone,p.statut,p.date_naissance.jour,p.date_naissance.mois,p.date_naissance.annee,p.photo,p.date_embauche.jour,p.date_embauche.mois,p.date_embauche.annee);*/
                    }
else {exist=0; }
                }

               
                /*{
                    printf("\n\n\t\t\t\t\t le personnel recherche n'existe pas \n");
                }*/
            }
            fclose(f);

        /*}
        break;
        case 2 :
        {
            f=fopen(fichier_personnel, "rb");

            printf ("\n\t\t\t\t\tdonner le nom du personnel  :\n") ;
            fflush(stdin);
            scanf("%s",nom_cherche);

            if (f!=NULL)
            {exist=0;
	     rewind(f);

                while(fread(&p,sizeof(personnel),1,f)!=0 && exist!=1)

                {
                    if (strcmp(nom_cherche,p.nom)==0)
                    {

                        exist=1;
                        printf("\n\t\t\t\t\tle personnel recherche existe \n");
                        printf("Nom:%s\nPrenom:%s\nMatricule:%s\nMail:%s\nCIN:%d\nTelephone:%d\nStatut: %s\nDate de naissance:%d/%d/%d \n Photo:%s \nDate d\'embauche:%d/%d/%d",nom_cherche,p.prenom,p.matricule,p.mail,p.cin,p.telephone,p.statut,p.date_naissance.jour,p.date_naissance.mois,p.date_naissance.annee,p.photo,p.date_embauche.jour,p.date_embauche.mois,p.date_embauche.annee);
                    }
                }

                else (exist==0)
                {
                    printf("\n\n\t\t\t\t\t le personnel recherche n'existe pas \n");
                }
            }

            fclose(f);

        }
        break;
        case 3 :
        {
            f=fopen(fichier_personnel, "rb");

            printf ("\n\t\t\t\t\tdonner la matricule du personnel  :\n") ;
            fflush(stdin);
            scanf("%s",matricule_cherche);

            if (f!=NULL)
            {exist=0;
       	     rewind(f);

                while(fread(&p,sizeof(personnel),1,f)!=0 && exist!=1)

                {
                    if (strcmp(matricule_cherche,p.matricule)==0)
                    {
                        exist=1;

                        printf("\n\t\t\t\t\tle personnel recherche existe \n");
                        printf("Nom:%s\nPrenom:%s\nMatricule:%s\nMail:%s\nCIN:%d\nTelephone:%d\nStatut:%s\nDate de naissance:%d/%d/%d\nPhoto:%s \n Date d\'embauche:%d/%d/%d",p.nom,p.prenom,matricule_cherche,p.mail,p.cin,p.telephone,p.statut,p.date_naissance.jour,p.date_naissance.mois,p.date_naissance.annee,p.photo,p.date_embauche.jour,p.date_embauche.mois,p.date_embauche.annee);

                    }
                }

                else (exist==0)
                {
                    printf("\n\n\t\t\t\t\t le personnel recherche n'existe pas \n");
                }
            }

            fclose(f);

        }
        break;
        case 0 :
        {
            printf("\n\n\t\t\t\t\t Merci");
            Quit=1;
        }
        break;
        default:
            printf("\n\n\t\t\t\t\t Vous avez saisi un mauvais choix");
            
        }
    }
    while (Quit==0);*/
    return(exist);
}

/*********************************************************************************************************************************************/
/*Fonction pour modifier les champs d'un personnel*/
/*********************************************************************************************************************************************/

/*void modifier_personnel(char fichier_personnel[])
{
    personnel p,pl;
    int exist;
    FILE *f1,*f2;
    int choix;
    int Quit;
    int CIN_cherche;
    char nom_cherche[20];
    char matricule_cherche[20];
    


    f1=fopen(fichier_personnel,"rb");
    f2=fopen("tmp.txt","ab");

    if ((f1!=NULL) && (f2!=NULL))
    {
		do
    {
        printf("********************************************************************************\n\n");
        printf("********************************************************************************\n\n");
        printf("***************               Menu recherche                ********************\n");
        printf("***************            1- CIN             ********************\n");
        printf("***************            2- nom             ********************\n");
        printf("***************            3- matricule       ********************\n");
        printf("***************            0-retour au menu princiapl       ********************\n\n");
        printf("********************************************************************************\n");
        printf("\n\t\t\tveuillez saisir votre choix svp \n");
        scanf("%d",&choix);
        printf("********************************************************************************\n");

        switch (choix)
        {
        case 1 :
        {
            
            printf ("\n\t\t\t\t\tdonner le num de cin du personnel :\n") ;
            scanf("%d",&CIN_cherche);
            exist=0;
	    rewind(f1);
	    rewind(f2);
                while(fread(&p,sizeof(personnel),1,f1)!=0 && (exist!=1))

                {
                    if (CIN_cherche==p.cin)
                    {
                        exist=1;

                        printf("\n\t\t\t\t\tle personnel recherche existe \n");
                        printf("Nom:%s\nPrenom:%s\nMatricule:%s\nMail:%s\nCIN:%d\nTelephone:%d\nStatut:%s\nDate de naissance:%d/%d/%d \nPhoto:%s \nDate d\'embauche:%d/%d/%d",p.nom,p.prenom,matricule_cherche,p.mail,p.cin,p.telephone,p.statut,p.date_naissance.jour,p.date_naissance.mois,p.date_naissance.annee,p.photo,p.date_embauche.jour,p.date_embauche.mois,p.date_embauche.annee);

                        fwrite(&p,sizeof(personnel),1,f2); 
                    }
                else 
		    {
		         exist=0;
		         fwrite(&p,sizeof(personnel),1,f2);
		    }
              }
         
            if(exist!=1)
		{
			printf("\n\t\t\t\t\tle personnel recherche n \'existe pas \n");
			
		}
        }
        break;


        case 2 :
        {
         	printf ("\n\t\t\t\t\tdonner le nom du personnel  :\n") ;
            scanf("%s",nom_cherche);

            
                while(fread(&p,sizeof(personnel),1,f1)!=0 && exist!=1)

                {
                    if (strcmp(nom_cherche,p.nom)==0)
                    {
                        exist=1;

                        printf("\n\t\t\t\t\tle personnel recherche existe \n");
                        printf("Nom:%s\nPrenom:%s\nMatricule:%s\nMail:%s\nCIN:%d\nTelephone:%d\nStatut:%s\nDate de naissance:%d/%d/%d \nPhoto:%s \nDate d\'embauche:%d/%d/%d",p.nom,p.prenom,matricule_cherche,p.mail,p.cin,p.telephone,p.statut,p.date_naissance.jour,p.date_naissance.mois,p.date_naissance.annee,p.photo,p.date_embauche.jour,p.date_embauche.mois,p.date_embauche.annee);

                        saisir_personnel(&p);
                        fwrite(&p,sizeof(personnel),1,f2); 
                    }
                else 
		    {
		         exist=0;
		         fwrite(&p,sizeof(personnel),1,f2);
		    }
              }

		if(exist!=1)
		{
			printf("\n\t\t\t\t\tle personnel recherche n \'existe pas \n");
			
		}
        }
        break;

        case 3 :
        {
         	printf ("\n\t\t\t\t\tdonner la matricule du personnel  :\n") ;
            scanf("%s",matricule_cherche);

           

                while((fread(&p,sizeof(personnel),1,f1)!=0) &&  (exist!=1))

                {
                    if (strcmp(matricule_cherche,p.matricule)==0)
                    {
                        exist=1;

                        printf("\n\t\t\t\t\tle personnel recherche existe \n");
                        printf("Nom:%s\nPrenom:%s\nMatricule:%s\nMail:%s\nCIN:%d\nTelephone:%d\nStatut:%s\nDate de naissance:%d/%d/%d\nPhoto:%s \n Date d\'embauche:%d/%d/%d ",p.nom,p.prenom,matricule_cherche,p.mail,p.cin,p.telephone,p.statut,p.date_naissance.jour,p.date_naissance.mois,p.date_naissance.annee,p.photo,p.date_embauche.jour,p.date_embauche.mois,p.date_embauche.annee);

			saisir_personnel(&p);
                        fwrite(&p,sizeof(personnel),1,f2);                    
                   }
                
                    else 
		    {
		         exist=0;
		         fwrite(&p,sizeof(personnel),1,f2);
		    }
             }
        
	if(exist!=1)
		{
			printf("\n\t\t\t\t\tle personnel recherche n \'existe pas \n");
			
		}        
        }  
        break;

        case 0 :
        {
            printf("\n\n\t\t\t\t\tMerci");
            Quit=1;
        }
        break;

        default:
            printf("\n\n\t\t\t\t\t Vous avez saisi un mauvais choix");
            break;
        }
    }
    while (Quit==0);

        
    }
    fclose(f1);
    fclose(f2);

    remove(fichier_personnel);

    f1=fopen(fichier_personnel, "ab");
    f2=fopen("tmp.txt", "rb");

    if ((f2!=NULL)&&(f1!=NULL))
    {

        while(fread(&pl,sizeof(personnel),1,f2)!=0)

        {

            fwrite(&pl,sizeof(personnel),1,f1);

        }

    }
    fclose(f1);
    fclose(f2);

    remove("tmp.txt");

}





/*********************************************************************************************************************************************/
/*Fonction pour archiver les champs d'un personnel*/
/*********************************************************************************************************************************************/

void archiver_personnel(char fichier_personnel[],char archive_personnel[],int cin_cherche)
{
    int i;
    personnel p,per;

    FILE *f1,*f2,*f3;
   


   /* printf ("\n\t\t\t\t\tdonner la matricule\n") ;
    fflush(stdin);

    scanf("%s",matricule_cherche);*/

    f1=fopen(fichier_personnel,"rb");
    f2=fopen("tmp1.txt","ab");
    f3=fopen(archive_personnel, "ab");


    if ((f1!=NULL) && (f2!=NULL) && (f3!=NULL))
    {

        while(fread(&p,sizeof(personnel),1,f1)!=0)

        {
            if (cin_cherche!=p.cin)
            {

                fwrite(&p,sizeof(personnel),1,f2);
            }
            else
            {

                fwrite(&p,sizeof(personnel),1,f3);
            }

        }

    }
    fclose(f1);
    fclose(f2);
    fclose(f3);

   /* printf("\n****************************\n");
    printf("\nListe des personnels archivés:\n");
    printf("\n****************************\n");*/
    //afficher_personnels(archive_personnel);

    remove(fichier_personnel);

    f1=fopen(fichier_personnel, "ab");
    f2=fopen("tmp1.txt", "rb");

    if ((f2!=NULL)&&(f1!=NULL))
    {

        while(fread(&per,sizeof(personnel),1,f2)!=0)

        {
            if (cin_cherche!=per.cin)
            {

                fwrite(&per,sizeof(personnel),1,f1);
            }

        }

    }
    fclose(f1);
    fclose(f2);

   /* printf("\n*******************\n");
    printf("\nListe des personnels:\n");
    printf("\n*******************\n");
    afficher_personnels(fichier_personnel);*/
    remove("tmp1.txt");

}


/*********************************************************************************************************************************************/
/*Fonction pour afficher la liste des personnels archivés*/
/*********************************************************************************************************************************************/

/*void afficher_personnelsarchives(char archive_personnel[])
{
    personnel p;
    int i=0;

    FILE *f;

    f = fopen(archive_personnel, "rb");

    if (f!=NULL)

    {

        while(fread(&p,sizeof(personnel),1,f)!=0)
        {
            i++;
            printf("\nPersonnel%d:\nNom:%s\nPrenom:%s\nCIN:%d\nMatricule:%s\nMail:%s\nTelephone:%d\nStatut:%s\nPhoto:%s\nDate de naissance:  %d /%d/ %d\nDate d\'embauche:%d /%d/ %d\n\n",i,p.nom,p.prenom,p.cin,p.matricule,p.mail,p.telephone,p.statut,p.photo,p.date_naissance.jour,p.date_naissance.mois,p.date_naissance.annee,p.date_embauche.jour,p.date_embauche.mois,p.date_naissance.annee);
        }
    }

    else

        printf("Erreur d'ouverture");

    fclose(f);
}


/*********************************************************************************************************************************************/
/*Fonction pour initialiser la liste des personnels */
/*********************************************************************************************************************************************/

void initialiser_personnel(char fichier[])
{
 	FILE *f;
	//FILE *m;
 	f=fopen(fichier,"wb");
 	fclose(f);
	/*m=fopen("fichier_matricule","wb");
	fwrite("10001",5,1,m);
	fclose(m);*/
}


/*********************************************************************************************************************************************/
/*Fonction pour initialiser la liste des personnels archivés */
/*********************************************************************************************************************************************/

void initialiser_personnel_archive(char fichier[])
{
 	FILE *f;
	
 	f=fopen(fichier,"wb");
 	fclose(f);
	
} 




